define(function(require, exports){
	// var $ = require("jquery");
	var pubjs = require('pubjs');
	var view  = require('@base/view');
	var util = require('util');
	var common = require('modules/common');

	var Edit = view.container.extend({
		init:function(config){
			this.$defaultName = LANG('新建落地页_') + util.date('YmdHis');
			config = pubjs.conf(config, {
				'class': 'uk-form P-whiskyForm',
				'urlAdd': 'whisky/add',
				'urlLoad': 'whisky/info',
				'urlUpdate': 'whisky/update',
				'urlCheckRepeat': 'whisky/checkWhisky',
				'tplFile': '/tpl/whisky/edit.html',
				'view_model': {
					name: ''
					,defaultName: this.$defaultName
					,isEdit: false
					,isSaved: false
					,previewable: false // 是否可预览
					,'Status': 1
					,'StatusOpts': [
						{value: 1, label: LANG("开启")},
						{value: 2, label: LANG("暂停")}
					]
					,view: {}
				}
			});

			// 落地页id
			this.$id = 0;
			// 素材id
			this.$mid = 0;

			this.Super('init', arguments);
		},
		afterBuild:function(){
			var tabConfig ={
				'reqMethod': 'websocket',
				'list': {
					'external':{
						'text': LANG('外部链接'),
						'module': 'whisky/tab.materialLink'
					}
				}
			};

			var config = {
				'advertiser': {
					'type': 'button',
					'url': 'qualification/owns',
					'name': 'Name',
					'key': '_id',
					'reqType': 'websocket',
					'all': true,
					'width': 300,
					// 'def': '',
					'param': {

					},
					'def': LANG('选择广告主'),
					'panel_config': {
						'hasSearch': true,
						'height': 200,
						'z-index': 999
					}
				},
				'name': {
					'width': 300,
					'placeholder': this.$defaultName
				},
				/*tag: {
					'reqType': 'websocket',
					'hasLabel': false,
					'label': LANG('标签：'),
					'database': 'whisky/labels',
					'tips': LANG('给落地页贴上标签，方便管理。多个标签用“,”分开')
				},*/
				tab: tabConfig,
				cover: pubjs.config('uploader/cover'),
/*				linked: {
					'value': LANG('选择产品'),
					'popwin':{
						uri: 'product/popwin/product.base',
						param: {
							isSingle: true //保存时只能选一个
						}
					},
					'box': {
						uri: 'modules/linked.productBox'
					},
					'tips': LANG('关联产品代表该落地页能够使用到哪些产品的推广活动上，1个落地页只能关联1个，没有关联该落地页的产品是无法使用它来推广的。')
				},*/
				saveNotify: {
					view_model:{
						'title': LANG('保存成功!'),
						'desc': LANG('您所添加的落地页已成功保存。'),
						'list_title': LANG('填写说明：'),
						'list': [
							LANG('建议对该落地页进行预览/测试，确保能够正确登录到对应的游戏。')
						],
						'buttons': [
							{name: LANG('落地页列表'), type: 'goToList'}
							,{name: LANG('预览/测试'), type: 'preview'}
							,{name: LANG('继续添加落地页'), type: 'continueAdd'}
							,{name: LANG('继续编辑落地页'), type: 'continueEdit'}
						],
						'operate': this.eventButtonClick.bind(this)
					}
				},
				tipProduct: {
					'width': 300,
					'data': LANG('关联产品代表该落地页能够使用到哪些产品的推广活动上，1个落地页只能关联1个，没有关联该落地页的产品是无法使用它来推广的。')
				},
				save: {
					'value': LANG('保存'),
					'class': 'btn btn-confirm'
				},
				cancel: {
					'value': LANG('取消'),
					'class': 'btn btn-link mr20'
				},
				preview: {
					'value': LANG('预览'),
					'class': 'btn btn-default mr20'
				}
			};

			this.buildFromTemplate(config);
		},
		afterBuildTemplate: function(){
			this.updateAdvertiser();
		},
		updateAdvertiser: function(){
			var aderId = util.getQueryString('aderId');
			var advertiser = this.get('advertiser');
			if(aderId && advertiser && !self.$id){
				advertiser.setValue(aderId);
			}else{
				advertiser.reset();
			}
			return this;
		},
		load: function(id){
			var c = this.getConfig();
			if(id){
				pubjs.loading.show();
				this.vm.setItem('isEdit', true);
				pubjs.mc.send(c.urlLoad, {'_id': +id}, this.onData.bind(this));
			}
		},
		onData: function(err, data){
			pubjs.loading.hide();
			if(err){
				pubjs.alert(err.message);
				pubjs.controller.navigate('whisky');
				return false;
			}

			this.setData(data);
		},
		validate: function(data){
			if(!data.Name){
				// 若没有值，添加默认值
				data.Name = this.$defaultName;
				this.$.name.setValue(data.Name);
			}

			if(data.Name.length > 50)
			{
				pubjs.alert(LANG('落地页名称限制为50个字符'));
				return false;
			}

			var user = pubjs.getUserCurrent();
			// var hasProduct = (user.ExchangeInfo.CategoryId === 1);
			// // @todo
			// // 若帐号为有产品版，要求必选一个产品
			// if(hasProduct){
			// 	if(!data.Products || (data.Products && !data.Products.length)){
			// 		pubjs.alert(LANG('请设置关联产品'));
			// 		return false;
			// 	}
			// }

			if(!data.Material && data.Type === 2){
				pubjs.alert(LANG('请填写外部链接地址'));
				return false;
			}
			if(!data.Material && data.Type === 1){
				pubjs.alert(LANG('请上传素材'));
				return false;
			}


			if(!data.Layout && data.Type === 1){
				pubjs.alert(LANG('请选择一个落地页模版'));
				return false;
			}
			return true;
		},
		getData: function(){
			var sub = this.$;
			var vm = this.vm.$;
			var name = sub.name.getValue() || this.$defaultName;
			name = name && name.trim && name.trim();
			var ret = {
				'AdvertiserId': +sub.advertiser.getValue(true).id || '',
				'Name': name,
				//'Labels': sub.tag.getData(),
				// 'Cover': sub.cover.getValue()[0],
				//'Products': sub.linked.getValue()
			};

			var active = sub.tab.getActive();
			var tab = sub.tab.getData();
			var Material = tab[active];
			ret.DeepLink = Material.DeepLink;
			ret.Material = Material.link;
			ret.LandingPageUpdate = Material.LandingPageUpdate;
			if(Material.LandingPageUpdate === true) {
				ret.LandingPage = Material.LandingPage;
			}
			ret.Type = 2;

			ret.Status = +vm.Status || 1;

			ret._id = this.$id;
			return ret;
		},
		setData: function(data){
			// var vm = this.vm.$;
			this.$id = data._id;

			if(data.AdvertiserId){
				this.$.advertiser.setValue(data.AdvertiserId).disable();
			}

			// 名称
			this.$.name.setValue(data.Name);

			var trans = [null,  'local', 'external'];
			var active = trans[data.Type];
			this.$.tab.switchTab(active);
			var tab = this.$.tab.get(active);
			tab.setData({
				'Material': data.Material,
				'MaterialDetails': data.MaterialDetails,
				'LandingPage': data.LandingPage,
				'DeepLink': data.DeepLink,
				'Layout': data.Layout,
				'manualLandPage': data.manualLandPage
			});

			//this.$.tag.setData(data.Labels);

			// // 封面
			// this.$.cover.reset();
			// if (data.Cover) {
			// 	this.$.cover.setValue(data.Cover);
			// }
			//this.$.linked.setValue(data.Products);

			// 更新素材id
			if(active == 'local'){
				this.$mid = data._id;
			}

			// 落地页状态
			this.vm.$.Status = data.Status || 1;
		},
		reset: function(){
			this.$id = 0;
			this.vm.reset();

			this.$.tab.reset();

			this.$.advertiser.reset().load().enable();
			this.updateAdvertiser();

			//this.$.tag.reset();
			//this.$.tag.refresh();

			//this.$.linked.reset();
			this.$.name.setValue(this.$defaultName);


			this.$.saveNotify.hide();
		},
		save: function(froce_update)
		{
			var c = this.getConfig();
			var url = this.$id ? c.urlUpdate : c.urlAdd;
			var data = this.getData();
			// 新建情况下，才允许强制更新
			data.froce_update = !!froce_update && !this.$id;

			if(!this.validate(data))
			{
				return false;
			}

			pubjs.loading.show();
			pubjs.mc.send(url, data, this.onSave.bind(this));
		},
		onSave: function(err, data)
		{
			pubjs.loading.hide();
			if(err)
			{
				pubjs.alert(err.message);
				return false;
			}

			if(common.checkOpener() && window.opener && window.opener.pubjs)
			{
				window.opener.pubjs.core.cast("saveWhiskySuccess", {'id': data._id});
			}

			this.$id = data._id;
			this.vm.$.isSaved = true;
			var title = '【' + data._id + '】' + data.Name;
			this.$.saveNotify.setContentTitle(LANG('落地页名称：')+ title);
			this.$.saveNotify.show();
			return data;
		},
		checkRepeatAndSave: function(callback)
		{
			var url = this.getConfig('urlCheckRepeat');
			var data = this.getData();
			pubjs.loading.show();
			pubjs.mc.send(
				url,
				data,
				this.onCheckRepeat.bind(this)
			);
		},
		onCheckRepeat: function(err, data)
		{
			var self = this;
			pubjs.loading.hide();
			if (err)
			{
				pubjs.alert(err.message);
				return false;
			}

			if (data.repeat)
			{
				if (data.IsDeleted)
				{
					pubjs.confirm(LANG('已存在归档中的相同落地页，可能和其它投放中的推广组有关联关系，是否还原此落地页。'), function(isOk)
					{
						if (isOk)
						{
							// 强制保存更新
							self.save(true);
						}
					});
				}
				else
				{
					pubjs.alert(LANG('落地页链接已存在'));
					return false;
				}
			}
			else
			{
				self.save();
			}
		},
		// 保存成功页面的操作
		eventButtonClick: function(type){
			switch(type){
				case 'goToList':
					pubjs.controller.navigate(-1);
				break;
				case 'preview':
					this.preview(this.$id);
					return false;
				case 'continueAdd':
					this.reset();
					pubjs.controller.navigate('serving/whiskyEdit');
				break;
				case 'continueEdit':
					this.vm.$.isSaved = false;
					pubjs.controller.navigate('serving/whiskyEdit/' + this.$id);
				break;
			}
			this.$.saveNotify.hide();
			return false;
		},
		onInputClick: function(ev){
			switch(ev.name){
				case 'save':
					this.checkRepeatAndSave();
				break;
				case 'cancel':
					pubjs.controller.navigate(-1);
				break;
				case 'preview':
					this.preview();
				break;
			}
			return false;
		},
		onUploadSuccess: function(ev) {
			this.$mid = 'fid_' + ev.param;
		},
		preview: function(id){
			var url;
			var tab = this.$.tab;
			var active = tab.getActive();
			// 外部链接
			if(active == 'external'){
				url = tab.getData()[active]['link'];
			}
			//素材上传
			if(active == 'local'){
				var mid;
				if(!id) {
					if(!this.$mid){
						pubjs.error('素材尚未上传完成');
						return false;
					}
					mid = this.$mid;
				}
				else {
					mid = id;
				}

				var link = pubjs.config('materialPreview/whisky');
				url = link.replace('{id}', mid);
			}

			window.open(url, "PreviewMaterialWindow");
		}
	});
	exports.base = Edit;

});